package org.jsola.hr.web;


import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.jsola.core.Page;
import org.jsola.core.Result;
import org.jsola.hr.query.SocStatisticalQuery;
import org.jsola.hr.vo.EmpSocInfoListVO;
import org.jsola.hr.vo.SocAmountVO;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;

import java.util.List;

/**
 * @author lyh
 */


@Api(tags = "hr-社保统计页面")
public interface ISocStatisticalControllerAPI {

    /**
     * 查询社保统计页面的顶部总计
     * @param socStatisticalQuery 查询参数
     * @return 社保统计页面顶部总计
     */
    @ApiOperation(value = "查询社保统计页面的顶部总计")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "socStatisticalQuery", dataType = "SocStatisticalQuery", value = "统计页面查询参数", paramType = "query")
    })
    Result<SocAmountVO> selectAmount(SocStatisticalQuery socStatisticalQuery);

    /**
     * 查询某个时间段的各个月份的社保和公积金统计
     * @param socStatisticalQuery 查询参数
     * @return 各个月份的社保和公积金统计
     */
    @ApiOperation(value = "查询某个时间段的各个月份的社保和公积金统计")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "socStatisticalQuery", dataType = "SocStatisticalQuery", value = "统计页面查询参数", paramType = "query")
    })
    Result<List<SocAmountVO>> selectMonthStatistical(SocStatisticalQuery socStatisticalQuery);

    /**
     * 查询某个时间段的各个用工单位的社保和公积金统计
     * @param socStatisticalQuery 查询参数
     * @return 各个用工单位的社保和公积金统计
     */
    @ApiOperation(value = "查询某个时间段的各个用工单位的社保和公积金统计")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "socStatisticalQuery", dataType = "SocStatisticalQuery", value = "统计页面查询参数", paramType = "query")
    })
    Result<List<SocAmountVO>> selectCompanyStatistical(SocStatisticalQuery socStatisticalQuery);

    /**
     * 查询某个时间段的各个分公司的社保和公积金统计
     * @param socStatisticalQuery 查询参数
     * @return 各个分公司的社保和公积金统计
     */
    @ApiOperation(value = "查询某个时间段的各个分公司的社保和公积金统计")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "socStatisticalQuery", dataType = "SocStatisticalQuery", value = "统计页面查询参数", paramType = "query")
    })
    Result<List<SocAmountVO>> selectChildCompanyStatistical(SocStatisticalQuery socStatisticalQuery);

    /**
     * 查询社保统计页面中部右侧员工参保信息
     * @param socStatisticalQuery 查询参数
     * @return 员工参保信息
     */
    @ApiOperation(value = "查询社保统计页面中部右侧员工参保信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "socStatisticalQuery", dataType = "SocStatisticalQuery", value = "统计页面查询参数", paramType = "query")
    })
    Result<Page<EmpSocInfoListVO>> selectEmpSocInfoStatistical(SocStatisticalQuery socStatisticalQuery);

    /**
     * 查询社保统计页面底部参保方案,参保地统计信息
     * @param socStatisticalQuery 查询参数
     * @return 参保方案,参保地统计信息
     */
    @ApiOperation(value = "查询社保统计页面底部参保方案,参保地统计信息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "socStatisticalQuery", dataType = "SocStatisticalQuery", value = "统计页面查询参数", paramType = "query")
    })
    Result<SocAmountVO> selectCountAndProportion(SocStatisticalQuery socStatisticalQuery);

    /**
     * 查询社保统计页面中部社保的各项详情
     * @param socStatisticalQuery 查询参数
     * @return 社保的各项详情
     */
    @ApiOperation(value = "查询社保统计页面中部社保的各项详情")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "socStatisticalQuery", dataType = "SocStatisticalQuery", value = "统计页面查询参数", paramType = "query")
    })
    Result<SocAmountVO> selectSocProgItem(SocStatisticalQuery socStatisticalQuery);

    /**
     * 员工社保导出Excel
     * @param socStatisticalQuery 查询参数
     * @return Excel
     */
    @ApiOperation(value = "员工社保导出Excel")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "socStatisticalQuery", dataType = "SocStatisticalQuery", value = "统计页面查询参数", paramType = "query")
    })
    ResponseEntity<Resource> empSocInfoStatisticalExport(SocStatisticalQuery socStatisticalQuery);
}
